const { AsyncParallelHook } = require('tapable')

let hook = new AsyncParallelHook(['name'])

// 对于异步钩子的使用 在添加事件监听时会存在三种方式： tap  tapAsync   tapPromise

// hook.tap('fn1', (name) => {
//     console.log('fn1 ----> ', name);
// })

// hook.tap('fn2', (name) => {
//     console.log('fn2 ----> ', name);
// })


// hook.callAsync('zzzz', () => {
//     console.log('完成');
// })

// console.time('time')

// hook.tapAsync('fn1', (name, callback) => {
//     setTimeout(() => {
//         console.log('fn1 ----> ', name);
//         callback()
//     }, 1000)
// })

// hook.tapAsync('fn2', (name, callback) => {
//     setTimeout(() => {
//         console.log('fn2 ----> ', name);
//         callback()
//     }, 2000)
// })


// hook.callAsync('lg', () => {
//     console.log('完成了');
//     console.timeEnd('time')
// })


console.time('time')

hook.tapPromise('fn1', (name) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('fn1 ----> ', name);
            resolve()
        }, 1000)
    })
})

hook.tapPromise('fn2', (name) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('fn2 ----> ', name);
            resolve()
        }, 2000)
    })
})


hook.promise('fffff').then(() => {
    console.log('完成');
    console.timeEnd('time')
})